package com.ssy.lingxi.member.merchant.service.web;

import com.ssy.lingxi.common.response.PageData;
import com.ssy.lingxi.common.response.Wrapper;
import com.ssy.lingxi.member.merchant.api.model.vo.inner.response.MemberManageQueryVO;
import com.ssy.lingxi.member.merchant.model.vo.basic.request.MemberNameVO;
import com.ssy.lingxi.member.merchant.model.vo.basic.request.ProvinceCodeVO;
import com.ssy.lingxi.member.merchant.model.vo.basic.request.UpperRelationIdAndAreaCodeVO;
import com.ssy.lingxi.member.merchant.model.vo.basic.request.UpperRelationIdVO;
import com.ssy.lingxi.member.merchant.model.vo.basic.response.CountryAreaCodeNameVO;
import com.ssy.lingxi.member.merchant.model.vo.lifecycle.response.MemberAppraisalPageQueryVO;
import com.ssy.lingxi.member.merchant.model.vo.lifecycle.response.MemberCreditComplaintPageQueryVO;
import com.ssy.lingxi.member.merchant.model.vo.lifecycle.response.MemberRecordInspectPageQueryVO;
import com.ssy.lingxi.member.merchant.model.vo.lifecycle.response.MemberRecordRectifyVO;
import com.ssy.lingxi.member.merchant.model.vo.maintenance.request.*;
import com.ssy.lingxi.member.merchant.model.vo.maintenance.response.*;
import com.ssy.lingxi.member.merchant.model.vo.validate.request.MemberAbilityMaintenanceMemberQueryVO;
import com.ssy.lingxi.member.merchant.model.vo.validate.request.MemberValidateVO;
import com.ssy.lingxi.member.merchant.model.vo.validate.request.ValidateIdPageVO;
import com.ssy.lingxi.member.merchant.model.vo.validate.request.ValidateIdVO;
import com.ssy.lingxi.member.merchant.model.vo.validate.response.MemberClassifyCategoryItemVO;
import com.ssy.lingxi.member.merchant.model.vo.validate.response.MemberClassifyQueryVO;
import com.ssy.lingxi.member.merchant.model.vo.validate.response.MemberValidateDetailLevelVO;
import org.springframework.http.HttpHeaders;
import org.springframework.web.bind.annotation.RequestHeader;

import java.util.List;

/**
 * 会员能力 - 会员维护相关接口
 * @author 万宁
 * @version 2.0.0
 * @date 2021-05-31
 */
public interface IMemberAbilityMaintenanceService {
    /**
     * 获取分页查询会员列表页面中各个查询条件下拉选择框的内容
     * @param headers HttpHeaders信息
     * @return 操作结果
     */
    Wrapper<MemberMaintenanceSearchConditionVO> getPageCondition(HttpHeaders headers);

    /**
     * 分页、模糊查询会员
     * @param headers HttpHeaders信息
     * @param queryVO 接口参数
     * @return 操作结果
     */
    Wrapper<PageData<MemberMaintenancePageQueryVO>> pageMembers(HttpHeaders headers, MemberAbilityMaintenanceMemberQueryVO queryVO);

    /**
     * 会员处理页面 - 会员详情
     * @param headers HttpHeaders信息
     * @param idVO 接口参数
     * @return 操作结果
     */
    Wrapper<MemberMaintenanceDetailVO> getSubMemberDetail(HttpHeaders headers, ValidateIdVO idVO);

    /**
     * 会员处理 - 会员冻结、解冻
     * @param headers HttpHeaders信息
     * @param statusVO 接口参数
     * @return 操作结果
     */
    Wrapper<Void> updateMemberRelationFreezeStatus(HttpHeaders headers, MemberFreezeStatusVO statusVO);

    /**
     * 会员处理 - 会员淘汰（解除关系）
     * @param headers HttpHeaders信息
     * @param vo 接口参数
     * @return 操作结果
     */
    Wrapper<Void> updateMemberEliminatedStatus(HttpHeaders headers, MemberEliminateOrBlacklistVO vo);

    /**
     * 会员处理 - 会员黑名单
     * @param headers HttpHeaders信息
     * @param vo 接口参数
     * @return 操作结果
     */
    Wrapper<Void> updateMemberBlacklistStatus(HttpHeaders headers, MemberEliminateOrBlacklistVO vo);

    /**
     * 会员详情 - 会员基本信息
     * @param headers HttpHeaders信息
     * @param idVO 接口参数
     * @return 查询结果
     */
    Wrapper<MemberMaintenanceDetailBasicVO> getMemberDetailBasic(HttpHeaders headers, ValidateIdVO idVO);

    /**
     * 会员详情 - 查询渠道信息（修改页面）
     * @param headers HttpHeaders信息
     * @param idVO 接口参数
     * @return 查询结果
     */
    Wrapper<MemberMaintenanceChannelVO> getMemberDetailChannel(HttpHeaders headers, ValidateIdVO idVO);

    /**
     * 会员详情 - 修改渠道信息 - 查询省列表
     * @param headers Http头部信息
     * @param idVO 接口参数
     * @return 返回信息
     */
    Wrapper<List<CountryAreaCodeNameVO>> getProvinceList(HttpHeaders headers, UpperRelationIdVO idVO);

    /**
     * 会员详情 - 修改渠道信息 - 查询市列表
     * @param headers Http头部信息
     * @param codeVO 接口参数
     * @return 返回信息
     */
    Wrapper<List<CountryAreaCodeNameVO>> getCityList(HttpHeaders headers, UpperRelationIdAndAreaCodeVO codeVO);

    /**
     * 会员详情 - 修改渠道信息
     * @param headers Http头部信息
     * @param updateVO 接口参数
     * @return 操作结果
     */
    Wrapper<Void> updateMemberDetailChannel(HttpHeaders headers, MemberMaintenanceChannelUpdateVO updateVO);

    /**
     * 会员详情 - 会员档案信息
     * @param headers HttpHeader信息
     * @param idVO 接口参数
     * @return 查询结果
     */
    Wrapper<MemberMaintenanceRecordVO> getMemberRecords(HttpHeaders headers, ValidateIdVO idVO);

    /**
     * 会员详情 - 会员档案 - 查询入库分类信息（修改页面）
     * @param headers HttpHeader信息
     * @param idVO 接口参数
     * @return 查询结果
     */
    Wrapper<MemberClassifyQueryVO> getMemberClassification(HttpHeaders headers, ValidateIdVO idVO);

    /**
     * “修改入库分类信息” - “适用区域”-省列表
     * @param headers Http头部信息
     * @return 查询结果
     */
    Wrapper<List<CountryAreaCodeNameVO>> getClassifyProvinces(HttpHeaders headers);

    /**
     * “修改入库分类” - “适用区域”-根据省编码查询市列表
     * @param headers Http头部信息
     * @param codeVO 接口参数
     * @return 查询结果
     */
    Wrapper<List<CountryAreaCodeNameVO>> getClassifyCities(HttpHeaders headers, ProvinceCodeVO codeVO);

    /**
     * “修改入库分类” - 品类信息 - 查询结算方式与发票类型
     * @param headers Http头部信息
     * @return 查询结果
     */
    Wrapper<MemberClassifyCategoryItemVO> getToClassifyCategoryItems(HttpHeaders headers);

    /**
     * 会员详情 - 会员档案 - 修改入库分类信息
     * @param headers HttpHeader信息
     * @param updateVO 接口参数
     * @return 查询结果
     */
    Wrapper<Void> updateMemberClassification(HttpHeaders headers, MemberMaintenanceClassificationUpdateVO updateVO);

    /**
     * 会员详情 - 会员档案 - 分页查询考察信息
     * @param headers HttpHeader信息
     * @param pageVO 接口参数
     * @return 查询结果
     */
    Wrapper<PageData<MemberRecordInspectPageQueryVO>> pageMemberInspect(HttpHeaders headers, ValidateIdPageVO pageVO);

    /**
     * 会员详情- 会员档案 - 分页查询考评信息
     * @param headers HttpHeader信息
     * @param pageVO 接口参数
     * @return 查询结果
     */
    Wrapper<PageData<MemberAppraisalPageQueryVO>> pageMemberAppraisal(HttpHeaders headers, ValidateIdPageVO pageVO);

    /**
     * 会员详情 - 会员档案 - 分页查询会员整改
     * @param headers Http头部信息
     * @param pageVO 接口参数
     * @return 查询结果
     */
    Wrapper<PageData<MemberRecordRectifyVO>> pageMemberRecordRectify(HttpHeaders headers, ValidateIdPageVO pageVO);

    /**
     * 会员详情 - 会员等级信息
     * @param headers HttpHeaders信息
     * @param validateVO 接口参数
     * @return 操作结果
     */
    Wrapper<MemberValidateDetailLevelVO> getMemberLevelDetail(HttpHeaders headers, MemberValidateVO validateVO);

    /**
     * 会员详情 - 会员等级信息 - 分页查询交易分获取记录
     * @param headers HttpHeaders信息
     * @param pageVO 接口参数
     * @return 操作结果
     */
    Wrapper<PageData<MemberDetailLevelHistoryVO>> pageMemberLevelDetailHistory(HttpHeaders headers, ValidateIdPageVO pageVO);

    /**
     * 会员详情 - 会员权益信息
     * @param headers HttpHeaders信息
     * @param validateVO 接口参数
     * @return 操作结果
     */
    Wrapper<MemberDetailRightVO> getMemberDetailRight(HttpHeaders headers, MemberValidateVO validateVO);

    /**
     * 会员详情 - 会员权益信息 - 分页查询会员权益获取记录
     * @param headers HttpHeaders信息
     * @param pageVO 接口参数
     * @return 操作结果
     */
    Wrapper<PageData<MemberDetailRightHistoryVO>> pageMemberDetailRightHistory(HttpHeaders headers, ValidateIdPageVO pageVO);

    /**
     * 会员详情 - 会员权益信息 - 分页查询会员权益使用记录
     * @param headers HttpHeaders信息
     * @param pageVO 接口参数
     * @return 操作结果
     */
    Wrapper<PageData<MemberDetailRightSpendHistoryVO>> pageMemberDetailRightSpendHistory(HttpHeaders headers, ValidateIdPageVO pageVO);

    /**
     * 会员详情 - 会员信用信息
     * @param headers HttpHeaders信息
     * @param validateVO 接口参数
     * @return 操作结果
     */
    Wrapper<MemberDetailCreditVO> getMemberDetailCredit(HttpHeaders headers, MemberValidateVO validateVO);

    /**
     * 会员详情 - 会员信用信息 - 交易评价汇总
     * @param headers HttpHeaders信息
     * @param validateVO 接口参数
     * @return 操作结果
     */
    Wrapper<MemberDetailCreditCommentSummaryVO> getMemberDetailCreditTradeCommentSummary(HttpHeaders headers, MemberValidateVO validateVO);

    /**
     * 会员详情 - 会员信用 - 分页查询交易评论历史记录
     * @param headers HttpHeaders信息
     * @param pageVO 接口参数
     * @return 操作结果
     */
    Wrapper<PageData<MemberDetailCreditTradeHistoryVO>> pageMemberDetailCreditTradeCommentHistory(HttpHeaders headers, MemberDetailCreditHistoryPageVO pageVO);

    /**
     * 会员详情 - 会员信用信息 - 售后评价汇总
     * @param headers HttpHeaders信息
     * @param validateVO 接口参数
     * @return 操作结果
     */
    Wrapper<MemberDetailCreditCommentSummaryVO> getMemberDetailCreditAfterSaleCommentSummary(HttpHeaders headers, MemberValidateVO validateVO);

    /**
     * 会员详情 - 会员信用 - 分页查询售后评论历史记录
     * @param headers HttpHeaders信息
     * @param pageVO 接口参数
     * @return 操作结果
     */
    Wrapper<PageData<MemberDetailCreditAfterSaleHistoryVO>> pageMemberDetailCreditAfterSaleCommentHistory(HttpHeaders headers, MemberDetailCreditHistoryPageVO pageVO);

    /**
     * 会员详情 - 会员信用 - 投诉汇总
     * @param headers HttpHeaders信息
     * @param validateVO 接口参数
     * @return 操作结果
     */
    Wrapper<MemberDetailCreditComplainSummaryVO> getMemberDetailCreditComplainSummary(HttpHeaders headers, MemberValidateVO validateVO);

    /**
     * 会员详情 - 会员信用 - 分页查询投诉历史记录
     * @param headers HttpHeaders信息
     * @param pageVO 接口参数
     * @return 操作结果
     */
    Wrapper<PageData<MemberCreditComplaintPageQueryVO>> pageMemberDetailCreditComplainHistory(HttpHeaders headers, ValidateIdPageVO pageVO);

    /**
     * 会员详情 - 会员变更 - 分页查询会员变更记录
     * @param headers HttpHeaders信息
     * @param pageVO 接口参数
     * @return 操作结果
     */
    Wrapper<PageData<MemberDepositDetailHistoryVO>> pageMemberDepositDetailHistory(HttpHeaders headers, ValidateIdPageVO pageVO);

    /**
     * 分页、模糊查询平台会员信息列表
     * @param headers HttpHeaders信息
     * @param queryVO 接口参数
     * @return 操作结果
     */
    Wrapper<PageData<PlatformPageQueryMemberVO>> pagePlatformMembers(HttpHeaders headers, PlatformMemberQueryVO queryVO);

    /**
     * 根据会员id和角色id，查询会员角色为服务提供者的下级会员列表
     * @param headers HttpHeaders信息
     * @return 查询结果
     */
    Wrapper<PageData<MemberManageQueryVO>> subOrdinateMemberList(@RequestHeader HttpHeaders headers, MemberNameVO nameVO);
}
